package com.start.form.engine.core;

import com.start.form.engine.core.model.StartFormColumnModel;
import com.start.form.engine.core.entity.StartFormConfig;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface TableEngineService extends ITableInfo {
    /**
     * 获取当前存储器唯一标识 一般默认当前bean 名称
     * @return
     */
    String getStorageKey();

    /**
     * 获取当前存储器名称
     * @return
     */
   default String getStorageLabel(){
       return getStorageKey();
   }

    /**
     * 创建表
     *
     * @param config 数据表配置
     */
    void createTable(StartFormConfig config);

    /**
     * 修改表
     *
     * @param config 数据表配置
     */
    void updateTable(StartFormConfig config);

    /**
     * 同步数据表
     *
     * @param tableId 数据表id
     */
    default void synchronizationTable(String tableId) {
        synchronizationTable(getTable(tableId));
    }

    @Transactional
    void synchronizationTable(StartFormConfig formConfig);


    /**
     * 删除表
     */
    default void deleteTable(String tableId) {
        deleteTable(getTable(tableId));
    }

    @Transactional
    void deleteTable(StartFormConfig formConfig);

    /**
     * 清空数据
     *
     * @param tableId
     */
    default void clearData(String tableId) {
        clearData(getTable(tableId));
    }

    /**
     * 清空表数据
     *
     * @param formConfig
     */
    @Transactional
    void clearData(StartFormConfig formConfig);

    /**
     * 创建菜单
     *
     * @param tableId      数据表id
     * @param menuLabel    菜单名称
     * @param menuParentId 父级菜单
     */
    void createMenu(String tableId, String menuLabel, String menuParentId);


    /**
     * 查看列
     *
     * @param tableId
     * @return
     */
    List<StartFormColumnModel> getColumnConfig(String tableId);

    /**
     * 查询列
     *
     * @param formConfig
     * @return
     */
    List<StartFormColumnModel> getColumnConfig(StartFormConfig formConfig);
}
